package com.utf999.qiangmanger.service.iface;

import java.util.List;

import com.utf999.qiangmanger.entity.orm.CompanyEntity;
import com.utf999.qiangmanger.entity.orm.OrderTypeEntity;
import com.utf999.qiangmanger.exception.BizException;
import com.utf999.qiangmanger.service.IQiangService;

public interface IOrderTypeService extends IQiangService {
	/**
	 * 根据公司编号查询订单类型信息（无论这些订单类型的状态如何）<br>
	 * 包括这个订单对应的用户组信息、奖惩信息
	 * @param companyid 指定的公司编号信息
	 * @return
	 * @throws BizException
	 */
	public List<OrderTypeEntity> queryOrderTypesByCompanyid(String companyid) throws BizException;
	
	/**
	 * 根据工单类型编号查询指定的公司下的工单类型信息
	 * @param companyid 指定的公司编号
	 * @param orderCode 指定的工单类型编号
	 * @return 如果存在对应的工单类型，则进行返回，其他情况下返回null
	 * @throws BizException
	 */
	public OrderTypeEntity queryOrderTypeByCode(String companyid , String orderCode) throws BizException;
	
	/**
	 * 根据工单类型编号查询指定的公司下的工单类型信息（查询指定的工单类型是否存在）
	 * @param companyid 指定的公司编号
	 * @param orderCode 指定的工单类型编号
	 * @return 如果存在对应的工单类型，则进行返回，其他情况下返回null
	 * @throws BizException
	 */
	public OrderTypeEntity existOrderTypeByCode(String companyid , String orderCode) throws BizException;
	
	/**
	 * 当一个公司被创建的时候，这个方法用于初始化这个公司的“系统级订单类型”
	 * @param company 要进行初始化的公司信息
	 * @throws BizException
	 */
	public void initDefaultOrderType(CompanyEntity company) throws BizException;
	
	/**
	 * 为一个指定的公司创建一个自定义的工单类型信息
	 * @param companyid 指定的公司编号
	 * @param orderTypeName 新创建的订单类型名称
	 * @param orderCode 工单类型编码
	 * @param integral 工单类型默认的积分数量
	 * @param duration 工单类型默认的标准处理时长
	 * @throws BizException
	 */
	public void createOrderType(String companyid , String orderTypeName , String orderCode , Integer integral , Integer duration) throws BizException;
	
	/**
	 * 修改一个指定的工单类型
	 * @param orderTypeid 指定的工单类型编号
	 * @param orderTypeName 修改的工单类型的名称
	 * @param orderCode 修改的工单类型编号
	 * @param integral 工单类型默认的积分数量
	 * @param duration 工单类型默认的标准处理时长
	 * @throws BizException
	 */
	public void modifyOrderType(String orderTypeid , String orderTypeName , String orderCode, Integer integral , Integer duration) throws BizException;
	
	/**
	 * 将一个指定的工单类型绑定到一个或者多个用户分组上
	 * @param ordertypeid 指定的工单类型id
	 * @param groupids 要绑定到的一个或者多个用户分组上
	 * @throws BizException
	 */
	public void bindUsergroupMapping(String ordertypeid , String... groupids) throws BizException;
	
	/**
	 * 讲一个指定的工单类型从一个或者多个用户组中取消绑定
	 * @param ordertypeid 指定的工单类型id
	 * @param groupids 需要取消绑定的一个或者多个用户分组
	 * @throws BizException
	 */
	public void unbindUsergroupMapping(String ordertypeid , String... groupids) throws BizException;
}
